<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 冻结对象 
        // const obj = {
        //     name:"张三",
        //     age:20
        // }

        // obj = {   // 不能更改
        //     name:"李四",
        //     age:32
        // }

        // obj.name = "李四" ; // 可以更改 const定义的对象 
        // console.log(obj);

        //1. Object.freeze ： 只会冻结对象的一层数据
        // Object.freeze(obj); // 冻结对象，对象的内容变得不能更改 
        // obj.name = "李四";  // 修改对象属性是无效的；
        // console.log(obj);
        // var obj = {
        //     name:"张三",
        //     age:20,
        //     hobby:{
        //         one:"篮球"
        //     }
        // }
        // Object.freeze(obj);
        // // obj.name = "李四";
        // obj.hobby.one = "足球";
        // console.log(obj);



        // 2.递归实现深冻结 ： 类似深拷贝
        var obj = {
            name:"张三",
            age:20,
            hobby:{
                one:"篮球"
            }
        }
        function deepFreeze(obj){
            // 先冻结第一层数据
            Object.freeze(obj);
            for(let key in obj){
                if(obj.hasOwnProperty(key)){
                    if(typeof obj[key] === "object"){
                        // 递归调用冻结深层数据
                        deepFreeze(obj[key]);
                    }
                }
            }
        }
        deepFreeze(obj);  // 深冻结
        obj.hobby.one = "足球";
        console.log(obj);


    </script>
</body>
</html>